连接到自定义 SQL 查询

您所在的位置:网站首页 tableau window函数 连接到自定义 SQL 查询

连接到自定义 SQL 查询

2023-11-27 02:42| 来源: 网络整理| 查看: 265

对于大多数数据库,您可以连接到特定查询,而非整个数据集。因为数据库的 SQL 语法彼此略有不同,所以您连接到一个数据库和连接到另一个数据库时,分别使用的自定义 SQL 或许也不相同。但是,如果准确知道所需信息并且知道如何编写 SQL 查询,则使用自定义 SQL 可能很有用。

尽管您使用自定义 SQL 可能有多种常见原因,但您可以使用自定义 SQL 跨表合并数据、重新转换字段以执行跨数据库联接、重构或减小数据大小以进行分析等。

对于 Excel 和文本文件数据源,此选项仅在 Tableau Desktop 8.2 之前创建的工作簿中可用,或者在通过旧版连接在 Windows 上使用 Tableau Desktop 时可用。若要使用旧版连接来连接到 Excel 或文本文件,请连接到文件,并在“打开”对话框中单击“打开”下拉菜单,然后选择“使用旧版连接打开”。

注意:从 Tableau 2020.2 开始,不再支持旧版 Excel 和文本连接。请参见 Tableau 社区中的 Legacy Connection Alternatives(旧版连接替代方案)文档,了解使用旧版连接的替代方案。

连接到自定义 SQL 查询

连接到数据后,双击“数据源”页面上的“新建自定义 SQL”选项。

在文本框中键入或粘贴查询。查询必须是单个 SELECT* 语句。

完成后,单击“确定”。

单击“确定”时,查询将运行,并且自定义 SQL 查询表将显示在画布的逻辑层中。只有自定义 SQL 查询中相关字段才会显示在“数据源”页面上的数据网格中。

有关画布的逻辑层和物理层的详细信息,请参见Tableau 数据模型。

自定义 SQL 查询的示例

垂直合并表(合并)

如果需要彼此相互附加数据,则可以直接在 Tableau 中画布的物理层中使用合并选项。在某些情况下,您的数据库不支持此选项,因此您可以改用自定义 SQL。

例如,假设您具有以下两个表:November 和 December。

NovemberDecember

您可以使用以下自定义 SQL 查询将第二个表 December 附加到第一个表 November:

SELECT * FROM November UNION ALL SELECT * FROM December

查询结果在数据网格中如下所示:

有关合并选项的详细信息,请参见合并数据。

更改字段的数据类型以执行跨数据库联接

要在画布的物理层中的两个表之间执行联接时,您在其上联接的字段的数据类型必须相同。如果字段的数据类型不相同,则您可以在执行联接之前使用自定义 SQL 更改数据类型(转换)字段。

例如,假设您要分别使用“根”和“ID”字段联接“Main”和“Sub”这两个表。“根”字段是数字类型,“ID”字段是字符串类型。您可以使用以下自定义 SQL 查询将“根”的数据类型从数字更改为字符串,以便可以使用“根”和“ID”字段联接“Main”和“Sub”表。

SELECT [Main].[Root] AS [Root_Number]CAST([Main].[Root] AS INT] AS [Root_String] FROM [Main]

此查询的结果显示原始“根”字段以及转换为字符串的“根”字段。

有关联接和跨数据库联接的详细信息,请参见联接数据。

减小数据的大小

在使用非常大的数据集时,如果先减小数据大小,则有时您可以在处理数据时节省时间。

例如,假设您有一个名为 FischerIris 的大表。您可以使用以下自定义 SQL 查询来检索指定的列和记录,从而减少您从 Tableau 连接到的数据集的大小。

SELECT [FischerIris].[Species] AS [Species], [FischerIris].[Width] AS [Petal Width], COUNT([FischerIris].[ID]) AS [Num of Species] FROM [FischerIris] WHERE [FischerIris].[Organ] = 'Petal' AND [FischerIris].[Width] > 15.0000 GROUP BY [FischerIris].[Species], [FischerIris].[Width]

重新构建您的数据(转置)

在某些情况下,您可能要使用需要在分析之前重新构建的表。虽然这种类型的任务可以在 Tableau 中画布的物理层中使用像转置这样的选项完成,但您的数据库可能不支持它。在这种情况下,您可以改用自定义 SQL。

例如,假设您具有下表:

若要在 Tableau 中更改其结构并优化要分析的数据,则可以使用以下自定义 SQL 查询:

SELECT Table1.Season ID AS [Season ID], Table1.Items - Don't like AS [Quantity], "Don't Like" AS [Reason] FROM Table1 UNION ALL SELECT Table1.Season ID AS [Season ID], Table.Items - Defective AS [Quantity], "Defective" AS [Reason] FROM Table1 UNION ALL SELECT Table1.Season ID AS [Season ID], Table1.Items - Too big AS [Quantity], "Too Big" AS [Reason] FROM Table1 UNION ALL SELECT Table1.Season ID AS Season ID, Table1.Items - Too small AS [Quantity] "Too Small" AS [Reason] FROM Table1

查询结果在数据网格中如下所示:

有关转置选项的详细信息,请参见对数据进行转置(从列到行)。

合并(联接)和聚合您的数据

如果需要合并表并聚合数据,则可以直接在 Tableau 中画布的物理层中使用联接和默认的聚合类型选项。在某些情况下,您可能需要改用自定义的 SQL。

例如,假设您具有以下两个表:订单和供应商。

订单供应商

您可以使用以下自定义 SQL 查询来查找订单数计数,并在“订单”和“供应商”表上执行左联接:

SELECT Vendors.Name,COUNT(Orders.Order) AS Number Of Orders FROM Orders LEFT JOIN Vendors ON Orders.VendorID=Vendors.VendorID GROUP BY Name;

查询的结果如下所示:

有关联接的详细信息,请参见联接数据。

引用重复列时出现错误

如果自定义 SQL 查询引用重复列,则在 Tableau 中尝试使用分析的某一列时,可能会出现错误。即使查询有效,也会发生这种情况。例如,考虑以下查询:

SELECT * FROM authors, titleauthor WHERE authors.au_id = titleauthor.au_id

该查询有效,但因为在此例中 au_id 字段在“authors”表和“titleauthor”表中都存在,因此该字段不明确。Tableau 将连接到查询,但只要尝试使用 au_id 字段,就会出现错误。原因是 Tableau 不知道要引用哪个表。

注意:最佳做法是,在自定义 SQL 查询中尽可能使用 AS 子句定义列别名。这是因为,在未使用别名的情况下,每个数据库在自动生成列名称时都有自己的规则。

编辑自定义 SQL 查询

编辑自定义 SQL 查询

在“数据源”页面上的画布中,双击逻辑层中的自定义 SQL 查询。将鼠标悬停在物理层中的自定义 SQL 表上,直到显示箭头。单击箭头,然后选择“编辑自定义 SQL 查询”。在对话框中,编辑自定义 SQL 查询。

更改自定义 SQL 查询名称

将自定义 SQL 查询拖到画布的逻辑层时,Tableau 会为其指定一个默认名称:Custom SQL Query(自定义 SQL 查询)、Custom SQL Query1(自定义 SQL 查询 1),诸如此类。您可以将默认名称更改为更有意义的名称。

在“数据源”页面上,在画布的逻辑层中,选择自定义 SQL 查询表中的下拉箭头,然后选择“重命名”。输入要用于自定义 SQL 查询的名称。在自定义 SQL 查询中使用参数

您可以在自定义 SQL 查询语句中使用参数以便将常量值替换为动态值。然后,可以在工作簿中更新参数以修改连接。例如,您可以连接到自定义 SQL 查询,该查询为 pageID 所指定的特定页面提供 Web 流量数据。您可以插入参数,而不是在 SQL 查询中为 pageID 值使用常量值。完成连接后,可以在工作簿中显示参数控件。使用参数控件可以除去 pageID 并拉入每个所需页面的数据,而不必编辑或复制连接。

Tableau Desktop 中,您可以直接从“自定义 SQL”对话框创建参数,也可以使用属于工作簿的任何参数。如果创建新参数,它将可供在工作簿中使用,就像任何其他参数一样。若要了解更多信息,请参见创建参数。

对于 Web 制作(在 Tableau Cloud 或 Tableau Server 中),您可以使用从 Tableau Desktop 中发布的现有参数。您无法在 Web 制作过程中创建新参数。

向自定义 SQL 查询添加参数

在“数据源”页面上的画布中,将鼠标悬停在自定义表上,直至显示编辑图标,然后单击编辑按钮。在对话框底部,单击“插入参数”。在 SQL 语句中选择常量值,然后从“插入参数”下拉菜单中选择要使用的参数。如果您尚未创建参数,请选择“创建新参数”。按创建参数中的说明创建参数。

注意: 参数只能替换文本值,不能替换表达式或标识符,例如表名称。

在以下示例中,自定义 SQL 查询会返回优先级标记为“Urgent”的所有订单。在自定义 SQL 语句中,订单优先级是常量值。如果要更改连接以查看“High”优先级订单,必须编辑数据源。

您可以将订单优先级常量值替换为参数,而不是创建并维护同一查询的许多变体。参数应包含订单优先级的所有可能值。

创建参数后,可以将其插入到 SQL 语句以替换常量值。

编辑完连接后,新参数将在“数据”窗格底部的“参数”区域中列出,并且参数控件将显示在视图右侧。当您选择不同值时,连接将进行更新。

注意: 如果您正在使用数据提取,则必须刷新数据提取才能反映对参数的更改。发布使用自定义 SQL 参数的数据源将会包括参数。系统会将参数传输至连接到该数据源的任何工作簿。

Tableau Catalog 支持自定义 SQL

从 2019.3 开始,Tableau Server 和 Tableau Cloud 的 数据管理 中提供了 Tableau Catalog。有关 Tableau Catalog 的详细信息,请参见 Tableau Server 或 Tableau Cloud 帮助中的“关于 Tableau Catalog”。

支持的查询

Catalog 支持符合 ANSI SQL-2003 标准的自定义 SQL 查询,但有三个已知的例外情况:

时区表达式多集表达式Tableau 参数

从 2021.4 开始,Tableau Catalog 还支持在自定义 SQL 中使用 Transact-SQL (T-SQL) 方言,但以下情况除外:

提示FOR 子句OPENROWSET、OPENXML 和 OPENJSON 函数ODBC 标量函数FOR SYSTEM_TIMETABLESAMPLEMATCH 表达式CONTAINS 表达式FREETEXT 表达式支持的特性与功能

对于其连接使用 MySQL 或 PostgreSQL 驱动程序的数据源、工作簿和流程(例如,Amazon Aurora for MySQL、Amazon RedShift、Pivotal Greenplum Database、MemSQL、Denodo 及其他),Catalog 支持以下附加功能。

MySQL GROUP_CONCAT 函数PostgreSQL 数组PostgreSQL EXTRACT() 函数

其他自定义 SQL 方案和功能可能会正常工作,但 Tableau 未专门针对这些方案进行测试或提供支持。

支持的世系

当资产使用自定义 SQL 时,资产页面的“世系”选项卡上会显示一条带有“显示自定义 SQL 查询”按钮的消息。单击该按钮可查看连接中使用的自定义 SQL。然后,如果您想将自定义 SQL 复制到剪贴板,请单击“复制”。

某些类型的自定义 SQL 会导致上游世系不完整。发生这种情况时,会显示一条包含该信息的消息。字段详细信息卡可能不包含指向已连接列的链接,或者可能根本不显示任何连接列。列详细信息卡可能不包含指向使用该列的字段的链接,或者可能根本不显示任何字段。

如果您正在检查表的世系,请注意,Catalog 不支持在使用自定义 SQL 收集的表元数据的世系中显示列信息。但是,如果其他资产使用同一个表并且不使用自定义 SQL,则 Tableau Catalog 可能能够显示有关它通过这些其他资产发现的列的信息。

在以下屏幕截图中,由于数据源使用 factAccountOpportunityByQuarter 表,因此已建立该表的索引。但是,由于它被自定义 SQL 查询引用,因此列信息不可用。

如果有多个数据源、工作簿或流程使用表,则在应用列级别筛选器时,将排除该表中使用自定义 SQL 查询的任何下游资产。因此,世系中显示的下游资产比实际使用的资产少。

有关使用世系的详细信息,请参见 Tableau Server(链接在新窗口中打开) 或 Tableau Cloud(链接在新窗口中打开) 帮助中的“为影响分析使用世系”。

另请参见

使用自定义 SQL 和 RAWSQL 执行高级空间分析(链接在新窗口中打开)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3